/** 
 * @file xmlccDomCore.h
 * @author Christian (graetz23@gmail.com)
 *
 * XMLCC is distributed under the MIT License (MIT); this file is part of.
 *
 * Copyright (c) 2008-2022 Christian (graetz23@gmail.com)
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

#ifndef __xmlccDomCore_h__
#define __xmlccDomCore_h__

/******************************************************************************/

#include "./xmlccDomParser.h" // parsing XML files
#include "./xmlccDomTokenizer.h" // map XML tags to XMLCC Node* objects

/******************************************************************************/

namespace XMLCC {

namespace DOM {

/******************************************************************************/

#define _XMLCC_VERSION_DOM_Core_ 1.00 // 20150101
#ifdef _XMLCC_DEBUG_
#define _XMLCC_DEBUG_DOM_Core_
#endif

/******************************************************************************/

class /// class converts strings keeping tags into objects of the DOM structure
Core {
  public:

    Core( void ); /// constructor
    virtual ~Core( void ); /// destructor

    TagList* parseFile2TagList( Str fileName ); /// reads 2 TagList* (StrList*)
    Root* parseFile2DomTree( Str fileName ); /// reads 2 Root* (Node*) obj tree

    Node* buildDomTreeOfTagList( TagList* tagList ); /// build DOM tree

  protected:

    Tokenizer _tokenizer; // map XML tags to object model tree
    SYS::XmlTool _xmlTool; /// clean malformed XML tags, comments, etc.

};
// class Core

/******************************************************************************/

}// namespace DOM

} // namespace XMLCC

/******************************************************************************/

#endif // __xmlccDomCore_h__
